Фильтр по тематике

Современные 32-разрядные ARM-микроконтроллеры серии STM32: блок вычисления кода CRC

В статье приведено описание блока вычисления кода СRС 32-разрядных ARM-микроконтроллеров серии STM32 от компании STMicroelectronics. Рассмотрен состав и назначение регистров блока, а также даны примеры программ для работы с этим блоком.

01.09.2014 602 0
Современные 32-разрядные ARM-микроконтроллеры серии STM32: блок вычисления кода CRC

Введение

В большинстве протоколов передачи данных для обеспечения достоверности их передачи обычно используется контрольная сумма произвольного блока данных. Для повышения качества проверки данных вместо контрольной суммы можно применять специальный код, так называемый CRC (Cyclic Redundancy Code – циклический избыточный код). Обычно используют коды с разрядностью 8, 16 или 32 бит. Для вычисления такого кода применяются исходные полиномы определённого вида.

В отличие от простой контрольной суммы код CRC позволяет обнаружить искажение даже в одном бите большого массива данных. Если обнаружено несовпадение кода CRC, вычисленного на приёмной стороне для блока принятых данных, и принятого кода CRC – данные считаются недостоверными и отбраковываются. В этом случае приёмник данных посылает сообщение об ошибке кода CRC и осуществляется повторная передача данных. Таким образом, производится защита данных от искажения во время обмена между устройствами.

В принципе код CRC можно вычислять с помощью программы. Однако на такое вычисление требуется определённое время. И если обмен данными происходит регулярно, то процессору потребуется отводить немало времени на подсчёт кодов CRC для каждой передачи или приёма данных.

Для снижения затрат времени на эти операции 32-разрядные ARM-микроконтроллеры серии STM32 [1] были оснащены аппаратным блоком вычисления контрольной суммы данных в виде кода CRC.

Описание блока

На рисунке приведена диаграмма работы блока вычисления CRC микроконтроллера STM32.

Вычисление кода CRC в блоке производится с помощью 32-разрядного регистра ввода и вывода и вычислителя CRC с полиномом. Подсчёт кода производится за 4 тактовых цикла шины AHB с тактовой частотой HCLK.

Блок вычисления микроконтроллера STM32 использует для получения 32-битного слова кода CRC полином вида: X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 + X^4 + X^2 + X + 1. Этот полином можно представить в виде шестнадцатеричного числа: 0x04C11DB7. Каждый разряд этого числа определяет наличие или отсутствие члена полинома X в соответствующей степени.

Блок вычисления использует 32-разрядный регистр данных как входной регистр для записи очередных данных для вычислителя кода CRC, а также хранит в нём результат предыдущего вычисления CRC, используемый при чтении этого регистра. Каждая операция записи в регистр данных создаёт комбинацию предыдущего значения CRC и его нового значения. Вычисление кода CRC выполняется не побайтно, а сразу над целым 32-разрядным словом.

Вычисление кода CRC обычно используется для проверки корректности передачи и приёма данных. Кроме того, в соответствии со стандартом EN/IEC 60335-1 код CRC может использоваться для проверки целостности содержимого флэш-памяти. Код CRC программы вычисляется в контроллере во время его работы, а затем сравнивается с контрольной суммой, которая была подсчитана во время её предварительной компоновки и была сохранена в определённой области памяти. При их несовпадении формируется соответствующее прерывание, и выполнение программы прекращается.

Регистры блока

Блок вычисления CRC включает в свой состав следующие регистры:

  • регистр данных CRC_DR;
  • регистр независимых данных CRC_IDR;
  • регистр управления CRC_CR.

В таблице приведена карта регист­ров блока вычисления CRC, а также и их значения после сброса.

Регистр данных CRC_DR используется как входной регистр при записи новых данных в вычислитель CRC. При чтении он содержит предыдущий результат вычисления CRC.

Регистр независимых данных CRC_IDR используется как 8-разрядный регистр общего назначения. Он может использоваться для временного хранения одного байта. Данные этого регист­ра сохраняются при сбросе CRC, вызванного битом регистра CRC_CR.

Регистр управления CRC_CR содержит всего один бит, используемый как бит сброса. Он сбрасывает блок вычисления CRC и устанавливает регистр данных в исходное значение 0xFFFF FFFF. Этот бит программно можно только устанавливать. Сбрасывается он автоматически, аппаратно.

Более подробную информацию о блоке вычисления кода CRC можно получить в оригинальном источнике [2].

Программирование

Библиотека CMSIS предоставляет целый набор функций для работы с блоком CRC. Функции этой библиотеки и подробные комментарии к ним представлены в листинге 1.

Для инициализации блока вычисления кода CRC и работы с ним необходимо выполнить следующие действия:

  • разрешить тактирование блока;
  • произвести сброс данных блока;
  • записать массив данных в блок;
  • считать вычисленное значение кода CRC из блока.

Рассмотрим конкретный пример программы, приведённый в листинге 2, которая позволяет вычислить код CRC для массива данных.

В результате работы программы переменная data_crc будет иметь значение 0x4B6B373E. Это и есть код CRC, который можно передавать вместе с массивом данных по каналу связи.

Таким образом, с помощью блока вычисления кода СRС обеспечивается надёжный обмен данными с внешним устройством без увеличения нагрузки на процессор микроконтроллера STM32.

Литература

  1. https://www.st.com.
  2. http://www.st.com/web/en/resource/technical/document/reference_manual/CD00246267.pdf.

© СТА-ПРЕСС

Если вам понравился материал, кликните значок — вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал —не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

01.09.2014 602 0
Комментарии
Рекомендуем
К 130-летию со дня рождения  великого советского физика  Игоря Евгеньевича Тамма.  Часть 5. Как были открыты плазмоны

К 130-летию со дня рождения великого советского физика Игоря Евгеньевича Тамма. Часть 5. Как были открыты плазмоны

Продолжаем серию статей о научном наследии Игоря Тамма. В предыдущих статьях мы рассмотрели, как его идеи, изложенные в статьях 1930–1950-х годов, повлияли на развитие нового научного направления «плазмоники», изучающего взаимодействие света с электронами в металлах и эффекты локализации света в объёмах меньше его длины волны. В частности, мы разобрали некоторые темы: современные быстродействующие электрооптические модуляторы, поверхностные состояния Тамма, запрещённые фотонные зоны, фотонные кристаллы («Современная электроника» № 7–9, 2025), а также экситон-поляритоны и фонон-поляритоны («Современная электроника» № 4, 2026). В этой статье мы расскажем о том, как научное предвидение Игоря Тамма позволило правильно прогнозировать именно те направления исследований, где были открыты объёмные и поверхностные плазмоны.
27.07.2026 СЭ №6/2026 199 0
Примеры измерения импульсной компоненты электромагнитного поля ОНЧ-диапазона на фоне сейсмической активности. Часть 2

Примеры измерения импульсной компоненты электромагнитного поля ОНЧ-диапазона на фоне сейсмической активности. Часть 2

Данная статья является продолжением работы «Примеры измерения импульсной компоненты электромагнитного поля ОНЧ-диапазона на фоне сейсмической активности» (Современная электроника. 2025. № 7. С. 39–43), в которой приведены экспериментальные данные импульсной компоненты естественного электромагнитного поля (И.К. Э-М. П.) ОНЧ-диапазона (600…3600 Гц), синхронно зарегистрированные на двух разнесённых по широте авроральных обсерваториях ПГИ Баренцбург (78,08°, 14,2°; арх. Шпицберген) и Ловозеро (67,97º, 35,08º; Мурманская обл., РФ). Для сопоставления сейсмической активности с АЧХ и АВХ И.К. ОНЧ-сигнала использованы архивные данные норвежской сети NORSAR, а также приведены некоторые характеристики гелиогеофизических факторов, влияющих на состояние нижней ионосферы: вариации магнитного поля Земли (Hx, Hy, Hz) и временны́е периоды освещённости Солнцем нижних слоёв ионосферы (h < 90 км) в пунктах регистрации ОНЧ-сигнала. Приёмно-регистрирующая аппаратура, используемая на обсерваториях, выполнена по идентичной схеме и состоит из приёмника ОНЧ-диапазона со взаимно ортогональным расположением приёмных рамочных антенн [1] и последовательного анализатора спектра импульсных сигналов [2].
24.07.2026 СЭ №6/2026 332 0

  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться